<!DOCTYPE html>
<!--
     SPDX-License-Identifier: CC-BY-SA-4.0
     SPDX-FileCopyrightText: 2020 seL4 Project a Series of LF Projects, LLC.
-->
<!-- Page last generated 2025-02-20 03:16:15 +0000 -->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Zynq7000 | seL4 docs</title>

    <!-- Our stylesheet and theme stylesheet.  Contains bootstrap. -->
    <link rel="stylesheet" href="/assets/css/style.css" type="text/css">
    <!-- Font awesome -->
    <link href="https://use.fontawesome.com/releases/v5.0.8/css/all.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
    <!-- Pygments syntax highlighting  -->
    <link rel="stylesheet" href="/assets/css/highlighting/trac.css" type="text/css">
    <link rel="icon" type="image/x-icon" href="/assets/favicon.ico"><script defer data-domain="docs.sel4.systems"
	    src="https://analytics.sel4.systems/js/script.js"></script></head>

  <body class="container-fluid">

    



<header>
  <ul class="row menu">
    <li class="col-xs-12 col-md-2" >
            <a href="https://sel4.systems" class="skip-icon">
              <img class="img-responsive" src="/assets/logo-text-white.svg" alt="seL4 logo" />
            </a>
    </li>
    <li class="col-xs-12 col-md-10 menu">
      <nav aria-label="Banner links">
        <h2><a href="/Resources" />Resources</h2>
        <h2><a href="/processes" />Contributing</a></h2>
        <h2><a href="/projects" />Projects</h2>
        <h2><a href="/Tutorials" />Tutorials</h2>
        <iframe title="DuckDuckGo search bar" src="https://duckduckgo.com/search.html?site=docs.sel4.systems&prefill=Search%20sel4.systems" style="overflow:hidden;margin-bottom:10px; padding:0;height:40px;float:right;border-width: 0px"></iframe>
      </nav>
    </li>
  </ul>
  <div class="clear"></div>
  
<div class="breadcrumbs bootstrap hidden-sm-down">
  <nav class="sel-breadcrumb" aria-label="Breadcrumb" >
    <ol class=" list-unstyled" vocab="http://schema.org/" typeof="BreadcrumbList">
      
      
        

        

        <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <a property="item" typeof="WebPage" href="/">
              <span property="name"><b>seL4 Docs</b></span>
            </a>
            <meta property="position" content="1" />
        </li>
      
        

        

        <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <a property="item" typeof="WebPage" href="/Hardware/">
              <span property="name"><b>Supported platforms</b></span>
            </a>
            <meta property="position" content="2" />
        </li>
      
        

        
          <li class="breadcrumb-item" property="itemListElement" typeof="ListItem">
            <span property="name">Zynq7000</span>
            <meta property="position" content="3" /></li>
          
    </ol>
  </nav>
  <nav class="sel-version" aria-label="Current Versions">
    <ol class="list-unstyled">
      <li class="list-unstyled text-right" style="margin-left:auto; padding:0rem 0rem;">
        Current versions:</li>
      <li class="list-unstyled text-right">
      <a href="/releases/sel4/13.0.0"><b>seL4-13.0.0</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/microkit/1.4.1"><b>microkit-1.4.1</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/camkes/camkes-3.11.0"><b>camkes-3.11.0</b></a></li>
      <li class="list-unstyled text-right">
      <a href="/releases/capdl/0.3.0"><b>capDL-0.3.0</b></a></li>
      </ol>
  </nav>
  <div class='clear'></div>
</div>


</header>

    <main>
      <div class="row">
  <div class="hidden-xs col-sm-4 col-md-3 col-lg-2">
    


<div class="sidebar">
















</div>

  </div>
  <div class="col-sm-8 col-md-9 col-lg-8 main">
    
    <div class="content">
      <h1 id="zynq7000">Zynq7000</h1>

<p>This board is a Zynq-7000 ZC706 Evaluation Kit, Rev 1.2</p>

<p>Xilinx maintains online material, including designs and documentation <a href="http://www.xilinx.com/zc706">here</a>.</p>

<h2 id="building">Building</h2>
<h3 id="sel4test">seL4test</h3>

<p>Checkout the sel4test project using repo as per <a href="/seL4Test">seL4Test</a></p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>repo init <span class="nt">-u</span> https://github.com/seL4/sel4test-manifest.git
repo <span class="nb">sync
mkdir </span>cbuild
<span class="nb">cd </span>cbuild
../init-build.sh <span class="nt">-DPLATFORM</span><span class="o">=</span>zynq7000 <span class="nt">-DAARCH32</span><span class="o">=</span>1
<span class="c"># The default cmake wrapper sets up a default configuration for the target platform.</span>
<span class="c"># To change individual settings, run `ccmake` and change the configuration</span>
<span class="c"># parameters to suit your needs.</span>
ninja
<span class="c"># If your target binaries can be executed in an emulator/simulator, and if</span>
<span class="c"># our build system happens to support that target emulator, then this script</span>
<span class="c"># might work for you:</span>
./simulate

</code></pre></div></div>
<p>If you plan to use the ./simulate script, please be sure to add the
<code class="language-plaintext highlighter-rouge">-DSIMULATION=1</code> argument when running cmake.</p>

<p>Generated binaries can be found in the <code class="language-plaintext highlighter-rouge">images/</code> directory.</p>

<h2 id="u-boot">U-Boot</h2>

<p>Use the following patch to set up an appropriate u-boot environment and enable elf loading:</p>

<div class="language-patch highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">From 8fb3caeb735b7cb6be409842a3e130a8a4173ad3 Mon Sep 17 00:00:00 2001
From: Adrian Herrera &lt;adrian.herrera@dsto.defence.gov.au&gt;
Date: Wed, 5 Nov 2014 09:58:00 +1030
Subject: [PATCH] Added Zynq ZC70x board for seL4
</span><span class="err">
</span><span class="p">Currently only boots from a FAT-formatted SD card; so no network boot yet
---
</span> boards.cfg                        |  1 +
 include/configs/zynq_zc70x_sel4.h | 60 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 61 insertions(+)
 create mode 100644 include/configs/zynq_zc70x_sel4.h
<span class="err">
</span><span class="gh">diff --git a/boards.cfg b/boards.cfg
index 7beb3c8..960b374 100644
</span><span class="gd">--- a/boards.cfg
</span><span class="gi">+++ b/boards.cfg
</span><span class="p">@@ -384,6 +384,7 @@</span> Active  arm         armv7          u8500       st-ericsson     u8500
 Active  arm         armv7          vf610       freescale       vf610twr            vf610twr                              vf610twr:IMX_CONFIG=board/freescale/vf610twr/imximage.cfg                                                                         Alison Wang &lt;b18965@freescale.com&gt;
 Active  arm         armv7          zynq        xilinx          zynq                zynq_microzed                        -                                                                                                                                  Michal Simek &lt;monstr@monstr.eu&gt;:Jagannadha Sutradharudu Teki &lt;jaganna@xilinx.com&gt;
 Active  arm         armv7          zynq        xilinx          zynq                zynq_zc70x                           -                                                                                                                                  Michal Simek &lt;monstr@monstr.eu&gt;:Jagannadha Sutradharudu Teki &lt;jaganna@xilinx.com&gt;
<span class="gi">+Active  arm         armv7          zynq        xilinx          zynq                zynq_zc70x_sel4                      -                                                                                                                                  Adrian Herrera &lt;adrian.herrera@dsto.defence.gov.au&gt;
</span> Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM010                     zynq_zc770:ZC770_XM010                                                                                                             Michal Simek &lt;monstr@monstr.eu&gt;:Jagannadha Sutradharudu Teki &lt;jaganna@xilinx.com&gt;
 Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM011                     zynq_zc770:ZC770_XM011                                                                                                             Michal Simek &lt;michal.simek@xilinx.com&gt;
 Active  arm         armv7          zynq        xilinx          zynq                zynq_zc770_XM012                     zynq_zc770:ZC770_XM012                                                                                                             Michal Simek &lt;monstr@monstr.eu&gt;:Jagannadha Sutradharudu Teki &lt;jaganna@xilinx.com&gt;
<span class="gh">diff --git a/include/configs/zynq_zc70x_sel4.h b/include/configs/zynq_zc70x_sel4.h
</span><span class="p">new file mode 100644
</span><span class="gh">index 0000000..f8bbac5
</span><span class="gd">--- /dev/null
</span><span class="gi">+++ b/include/configs/zynq_zc70x_sel4.h
</span><span class="p">@@ -0,0 +1,60 @@</span>
<span class="gi">+/*
+ * (C) Copyright 2013 Xilinx, Inc.
+ *
+ * Configuration settings for the Xilinx Zynq ZC702 and ZC706 boards
+ * See zynq-common.h for Zynq common configs
+ *
+ * SPDX-License-Identifier:	GPL-2.0-or-later
+ */
+
+#ifndef __CONFIG_ZYNQ_ZC70X_SEL4_H
+#define __CONFIG_ZYNQ_ZC70X_SEL4_H
+
+#define CONFIG_SYS_SDRAM_SIZE		(1024 * 1024 * 1024)
+
+#define CONFIG_ZYNQ_SERIAL_UART1
+#define CONFIG_ZYNQ_GEM0
+#define CONFIG_ZYNQ_GEM_PHY_ADDR0	7
+
+#define CONFIG_SYS_NO_FLASH
+
+#define CONFIG_ZYNQ_SDHCI0
+#define CONFIG_ZYNQ_USB
+#define CONFIG_ZYNQ_QSPI
+#define CONFIG_ZYNQ_I2C0
+#define CONFIG_ZYNQ_EEPROM
+
+#include &lt;configs/zynq-common.h&gt;
+
+/* Enable boot from ELF image */
+#define CONFIG_CMD_ELF
+
+/* U-Boot prompt */
+#if defined(CONFIG_SYS_PROMPT)
+#undef CONFIG_SYS_PROMPT
+#endif
+
+#define CONFIG_SYS_PROMPT    "zynq-seL4-uboot &gt; "
+
+/* Default environment */
+#if defined(CONFIG_EXTRA_ENV_SETTINGS)
+#undef CONFIG_EXTRA_ENV_SETTINGS
+#endif
+
+#define CONFIG_EXTRA_ENV_SETTINGS                                           \
+    "ethaddr=00:0a:35:00:01:22\0"                                           \
+    "bitstream_image=system.bit.bin\0"                                      \
+    "boot_image=BOOT.bin\0"                                                 \
+    "loadbit_addr=0x100000\0"                                               \
+    "mmc_loadbit_fat=echo Loading bitstream from SD/MMC/eMMC to RAM...;"    \
+        "mmcinfo &amp;&amp; "                                                       \
+        "fatload mmc 0 ${loadbit_addr} ${bitstream_image} &amp;&amp; "              \
+        "fpga load 0 ${loadbit_addr} ${filesize}\0"                         \
+    "sel4_image=sel4/sel4-image\0"                                          \
+    "loadsel4_addr=0x2080000\0"                                             \
+    "sdboot=echo Loading seL4 image from SD/MMC/eMMC to RAM...;"            \
+        "mmcinfo &amp;&amp; "                                                       \
+        "fatload mmc 0 ${loadsel4_addr} ${sel4_image} &amp;&amp; "                  \
+        "bootelf ${loadsel4_addr}\0"
+
+#endif /* __CONFIG_ZYNQ_ZC70X_SEL4_H */
</span><span class="gd">--
</span><span class="p">1.9.1
</span></code></pre></div></div>

<p>To get U-boot:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/xilinx/u-boot-xlnx.git
<span class="nb">cd </span>u-boot-xlnx.git
patch <span class="nt">-p1</span> &lt; 0001-Added-Zynq-ZC70x-board-for-seL4.patch
<span class="nb">export </span><span class="nv">CROSS_COMPILE</span><span class="o">=</span>arm-linux-gnueabi-
make zynq_zc70x_sel4_config
make
</code></pre></div></div>

<p>The u-boot file cannot be booted directly. You must first generate a boot image:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cp </span>u-boot u-boot.elf
<span class="nb">echo</span> <span class="s2">"image: { </span><span class="nv">$PWD</span><span class="s2">/u-boot.elf }"</span> <span class="o">&gt;</span> boot.bif
/opt/Xilinx/SDK/2014.4/bin/bootgen <span class="nt">-o</span> BOOT.BIN <span class="nt">-w</span> <span class="nt">-image</span> image.bif
</code></pre></div></div>

<p>To boot from the SD card, make sure that the first partition of the SD card is FAT32 and copy BOOT.bin to the root directory.</p>

<h2 id="development-environment">Development environment</h2>

<h3 id="vivado-sdk">Vivado SDK</h3>

<p>Bitstream generation (ie FPGA code compiler) is not support for ZC706 when using a free license. Other features may still work</p>

<p>The Vivado SDK provides many features:</p>

<ul>
  <li>first stage boot loader and boot image generation</li>
  <li>FPGA logic design</li>
  <li>ARM software design</li>
  <li>Support libraries</li>
  <li>JTAG connectivity and debugging</li>
</ul>

<p>Download it <a href="http://www.xilinx.com/support/download.html">here</a> (Requires a free Xilinx account).</p>

<p>After the download completes, extract and/or run the install program. You should run as root to install cable drivers, otherwise, they can be installed independently later.</p>

<p>When provided with install options, select “Vivado Design Edition” because the WebPack install does not support the ZC706 board. Ensure the Software Development Kit (SDK) is selected as an install candidate</p>

<p>When installation competes, the License Manager window will open. Choose “obtain license” from the tree on the left, select “Get Free Licenses” and click “Connect Now”. You will be navigated to the Xilinx login page in order to register for a license. Select the free webpack license and a license file will be mailed to you. While still in the License Manager, click “Load License” from the tree on the left and click the “Copy License” button. Select the license file that you received via email and click “Open”. Once you have configured your license, close the window and wait for the install to finish.</p>

<p>The last step is to install the cable drivers as follows:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">uname</span> <span class="nt">-a</span> | <span class="nb">grep</span> <span class="s2">"x86_64"</span> <span class="o">&amp;&amp;</span> <span class="nv">LIN</span><span class="o">=</span>lin64 <span class="o">||</span> <span class="nv">LIN</span><span class="o">=</span>lin
<span class="nb">cd</span> /opt/Xilinx/SDK/2014.4/data/xicom/cable_drivers/<span class="nv">$LIN</span>/install_script/install_drivers
<span class="nb">sudo</span> ./install_drivers
</code></pre></div></div>

<h3 id="jtag">JTAG</h3>

<p><a href="http://wiki.gentoo.org/wiki/Xilinx_USB_JTAG_Programmers">http://wiki.gentoo.org/wiki/Xilinx_USB_JTAG_Programmers</a></p>

<h4 id="you-will-need">You will need:</h4>

<ul>
  <li>xmd (shipped with vivado but can possibly be obtained as a package on its own)</li>
  <li>digilent USB drivers</li>
</ul>

<ol>
  <li>create a xmd.ini script within the directory that you intend to run xmd from.
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="c"># Connect to the board</span>
  connect arm hw
  <span class="c"># program the fpga with the provided bitstream</span>
  fpga <span class="nt">-f</span> system_wrapper.bit
  <span class="c"># The processor needs to be initialised (Clocks, MIO, etc), but these depend on the bitstream! ps7_init.tcl was generated with the bitstream. Load and execute this script to configure the processor.</span>
  <span class="nb">source </span>ps7_init.tcl
  ps7_init
  ps7_post_config
  <span class="c"># Download your elf file (Could also be done from GDB)</span>
  dow bootimg.elf
  <span class="c"># To run the elf file directly from XMD, uncomment the following lines</span>
  <span class="c"># run</span>
  <span class="c"># exit</span>
</code></pre></div>    </div>
  </li>
  <li>Run XMD. On my system, the executable is: ‘/opt/Xilinx/SDK/2013.4/bin/lin64/xmd’. XMD will not terminate; leave it open.</li>
  <li>Next run GDB. On my system, the executable is: ‘/opt/Xilinx/SDK/2013.4/gnu/arm/lin/bin/arm-xilinx-eabi-gdb bootimg.elf’, but any arm-*-gdb should work</li>
  <li>enter “tar ext localhost:1234” to connect to the GDB server that was started by XMD or the hw_server</li>
  <li>“c” to start the program!</li>
</ol>

<p>Version 2013.4 of GDB throws an error about an inaccessible memory address. This is fixed in version 2014.4 of the tools, but also requires 2014.4 of XMD of hw_server.</p>


    </div>
  </div>
</div>

    </main>
    


<footer class="site-footer">

  <h2 class="footer-heading">seL4 docs</h2>

  <div class="footer-col-wrapper">

    <div class="col-md-2">
      



<ul class="social-media-list">
  <li><a href="https://github.com/sel4"><i class="fab fa-github"></i> <span class="username">sel4</span></a></li><li><a href="https://github.com/sel4proj"><i class="fab fa-github"></i> <span class="username">sel4proj</span></a></li>
</ul>

    </div>

    <div class="col-md-8">
      <ul class="list-unstyled">
        <li>
          This site is for displaying seL4 related documentation.  Pull requests are welcome.
        </li>
        
          <li>
            Site last updated: Fri Feb 7 10:17:38 2025 +1100 ee78c8857c
          </li>
          <li>
                Page last updated: Tue Jan 14 15:56:06 2025 +1100 f28f1dfa66
          </li>
        
      </ul>
    </div>
    <div class="col-md-2">
<a href="https://github.com/seL4/docs/blob/master/Hardware/ZC706.md">View page on GitHub</a>
      <br />
      <a href="https://github.com/seL4/docs/edit/master/Hardware/ZC706.md">Edit page on GitHub</a>
      <br />
      <a href="/sitemap">Sitemap</a>
    </div>

  </div>

</footer>

  </body>
</html>
